package handlers

import (
	"net/http"

	"sysu-giep/internal/service"
	"sysu-giep/pkg/response"

	"github.com/gin-gonic/gin"
)

var backupHandler *BackupHandler

// InitBackupHandlers 初始化备份处理器
func InitBackupHandlers(handler *BackupHandler) {
	backupHandler = handler
}

// BackupHandler 备份服务处理器
type BackupHandler struct {
	backupService *service.BackUpService
}

// NewBackupHandler 创建备份处理器
func NewBackupHandler(backupService *service.BackUpService) *BackupHandler {
	return &BackupHandler{
		backupService: backupService,
	}
}

// GetTaskStatus 获取任务状态
// @Summary 获取定时任务状态
// @Description 获取所有定时任务的运行状态
// @Tags 定时任务
// @Accept json
// @Produce json
// @Success 200 {object} response.Response{data=map[string]interface{}}
// @Router /api/v1/admin/tasks/status [get]
func (h *BackupHandler) GetTaskStatus(c *gin.Context) {
	status := h.backupService.GetTaskStatus()
	response.SuccessWithMessage(c, "获取任务状态成功", status)
}

// StartTask 启动任务
// @Summary 启动定时任务
// @Description 启动指定的定时任务
// @Tags 定时任务
// @Accept json
// @Produce json
// @Param task_id path string true "任务ID"
// @Success 200 {object} response.Response
// @Router /api/v1/admin/tasks/{task_id}/start [post]
func (h *BackupHandler) StartTask(c *gin.Context) {
	taskID := c.Param("task_id")
	if taskID == "" {
		response.Error(c, http.StatusBadRequest, "任务ID不能为空")
		return
	}

	// 这里可以添加启动特定任务的逻辑
	// 目前所有任务都是自动管理的
	response.SuccessWithMessage(c, "任务启动成功", nil)
}

// StopTask 停止任务
// @Summary 停止定时任务
// @Description 停止指定的定时任务
// @Tags 定时任务
// @Accept json
// @Produce json
// @Param task_id path string true "任务ID"
// @Success 200 {object} response.Response
// @Router /api/v1/admin/tasks/{task_id}/stop [post]
func (h *BackupHandler) StopTask(c *gin.Context) {
	taskID := c.Param("task_id")
	if taskID == "" {
		response.Error(c, http.StatusBadRequest, "任务ID不能为空")
		return
	}

	// 这里可以添加停止特定任务的逻辑
	// 目前所有任务都是自动管理的
	response.SuccessWithMessage(c, "任务停止成功", nil)
}

// RemoveTask 移除任务
// @Summary 移除定时任务
// @Description 移除指定的定时任务
// @Tags 定时任务
// @Accept json
// @Produce json
// @Param task_id path string true "任务ID"
// @Success 200 {object} response.Response
// @Router /api/v1/admin/tasks/{task_id} [delete]
func (h *BackupHandler) RemoveTask(c *gin.Context) {
	taskID := c.Param("task_id")
	if taskID == "" {
		response.Error(c, http.StatusBadRequest, "任务ID不能为空")
		return
	}

	h.backupService.RemoveTask(taskID)
	response.SuccessWithMessage(c, "任务移除成功", nil)
}

// ExecuteTask 手动执行任务
// @Summary 手动执行定时任务
// @Description 立即执行指定的定时任务
// @Tags 定时任务
// @Accept json
// @Produce json
// @Param task_id path string true "任务ID"
// @Success 200 {object} response.Response
// @Router /api/v1/admin/tasks/{task_id}/execute [post]
func (h *BackupHandler) ExecuteTask(c *gin.Context) {
	taskID := c.Param("task_id")
	if taskID == "" {
		response.Error(c, http.StatusBadRequest, "任务ID不能为空")
		return
	}

	// 这里可以添加手动执行特定任务的逻辑
	// 目前所有任务都是自动管理的
	response.SuccessWithMessage(c, "任务执行成功", nil)
}
